/**
 * Copyright (c) 2017 ShopJsp. All Rights Reserved.
 * ============================================================================
 * 版权所有 2011 - 今 北京华宇盈通科技有限公司，并保留所有权利。
 * ----------------------------------------------------------------------------
 * 提示：在未取得SHOPJSP商业授权之前，您不能将本软件应用于商业用途，否则SHOPJSP将保留追究的权力。
 * ----------------------------------------------------------------------------
 * 官方网站：http://www.shopjsp.com
 * ============================================================================
 * @author
 * @CreateTime 2017-3-31 13:57:45
 */
package com.hyyt.shopjsp.wxmg.publicNo.service.imp;

import com.hyyt.shopjsp.util.common.StringStaticKey;
import com.hyyt.shopjsp.util.common.Utils;
import com.hyyt.shopjsp.util.json.FastJsonUtils;
import com.hyyt.shopjsp.util.redis.service.IRedisBasicService;
import com.hyyt.shopjsp.util.redis.util.RedisDataReadUtil;
import com.hyyt.shopjsp.wxmg.publicNo.dao.WxPublicNoInfoDAO;
import com.hyyt.shopjsp.wxmg.publicNo.pojo.WxPublicNoInfo;
import com.hyyt.shopjsp.wxmg.publicNo.service.IWxPublicNoInfoService;
import com.hyyt.shopjsp.wxmg.util.WxBasicUtil;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * wx_publicno_info, WX_微信基础信息
 *
 * @author Robot 2017-03-31 13:57:45
 */
@Service
public class WxPublicNoInfoService implements IWxPublicNoInfoService {
    private static  final Logger logger = Logger.getLogger(IWxPublicNoInfoService.class);

    @Resource
    private WxPublicNoInfoDAO wxPublicNoInfoDAO;

    /**
     * 注入redis操作
     */
    @Resource
    private IRedisBasicService redisBasicService;

    /**
     * 保存WX_微信基础信息
     *
     * @param wxPublicNoInfo WX_微信基础信息
     * @return 保存后的WX_微信基础信息
     */
    @Override
    public void saveWxPublicNoInfo(WxPublicNoInfo wxPublicNoInfo) {
        wxPublicNoInfoDAO.insert(wxPublicNoInfo);
    }

    /**
     * 更新WX_微信基础信息
     *
     * @param wxPublicNoInfo WX_微信基础信息
     * @return 更新后的WX_微信基础信息
     */
    @Override
    public void updateWxPublicNoInfo(WxPublicNoInfo wxPublicNoInfo) {
        wxPublicNoInfoDAO.update(wxPublicNoInfo);
    }

    /**
     * 删除指定ID的WX_微信基础信息
     *
     * @param id WX_微信基础信息ID
     */
    @Override
    public void deleteWxPublicNoInfo(Integer id) {
        wxPublicNoInfoDAO.delete(id);
    }

    /**
     * 删除指定ID集合的WX_微信基础信息
     *
     * @param ids WX_微信基础信息ID集合
    */
    public void deleteWxPublicNoInfo(Collection<Integer> ids){
        wxPublicNoInfoDAO.batchDelete(ids);
    }

    /**
     * 查询数据库中第一个WX_微信基础信息
     *
     * @return WX_微信基础信息
     */
    @Override
    public WxPublicNoInfo loadUniqueWxPublicNoInfo() {
        return wxPublicNoInfoDAO.load("loadUnique",null);
    }

    /**
     * 根据ID加载一个WX_微信基础信息
     *
     * @param id WX_微信基础信息ID
     * @return WX_微信基础信息
     */
    @Override
    public WxPublicNoInfo loadWxPublicNoInfo(Integer id) {
        return wxPublicNoInfoDAO.load(id);
    }

    /**
     * 查询WX_微信基础信息
     *
     * @param params 查询参数，为key-value形式
     * @return WX_微信基础信息集合
     */
    @Override
    public List<WxPublicNoInfo> queryWxPublicNoInfo(Map<String, Object> params) {
        return wxPublicNoInfoDAO.query(params);
    }

    /**
     * 查询WX_微信基础信息
     *
     * @param params   查询参数，没有则传null,分页参数key为“sortColumns”
     * @param startRow 起始行数（不含起始行的数据）
     * @param rowSize  要查询记录数
     * @return WX_微信基础信息集合
     */
    @Override
    public List<WxPublicNoInfo> queryWxPublicNoInfo(Map<String, Object> params, int startRow, int rowSize) {
        return wxPublicNoInfoDAO.query(params, startRow, rowSize);
    }

    /**
     * 统计WX_微信基础信息
     *
     * @param params 查询参数，没有则传null,分页参数key为“sortColumns”
     * @return 结果集记录数
     */
    @Override
    public int countWxPublicNoInfo(Map<String, Object> params) {
        return wxPublicNoInfoDAO.count(params);
    }

    /**
     * 根据更新微信Token
     *
     * @return 结果微信 access_token ticket
     */
    @Override
    public Map<String,Object> wxPublicNoInfoAccessTokenUpdate(){
        Map<String,Object> returnMap = new HashMap();
        try{
            WxPublicNoInfo wxPublicNoInfo =  this.loadUniqueWxPublicNoInfo();
            String accessToken = WxBasicUtil.getAccessToken(wxPublicNoInfo.getAppId(), wxPublicNoInfo.getAppSecret());
            logger.info("微信令牌定时加载accessToken："+accessToken);
            String ticket = WxBasicUtil.getTicket(accessToken);
            logger.info("微信令牌定时加载ticket："+ticket);
            redisBasicService.setKey(StringStaticKey.WX_PUBLIC_NO_INFO, FastJsonUtils.toJSONString(wxPublicNoInfo));
            redisBasicService.setKey(StringStaticKey.WX_ACCESS_TOKENS,accessToken);
            redisBasicService.setKey(StringStaticKey.WX_TICKET,ticket);
            returnMap.put("publicNoInfo",wxPublicNoInfo);
            returnMap.put("accessTokens", accessToken);
            returnMap.put("ticket", ticket);
            // ticket 不为空时，更新成功返回 true 反之 false
            if(Utils.objectIsNotEmpty(ticket)){
                returnMap.put("flag", true);
            }else{
                returnMap.put("flag", false);
            }
        }catch (Exception e){
            logger.error(e);
        }
        return returnMap;
    }

}